/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.Bl;

import java.sql.Time;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.Enumeraciones.EstadoDetallePrestamo;
import mx.its.dsw2.biblioteca.Enumeraciones.EstadoTransaccion;
import mx.its.dsw2.biblioteca.Modelo.DetallePrestamo;
import mx.its.dsw2.biblioteca.Modelo.Libro;
import mx.its.dsw2.biblioteca.Modelo.Prestamo;
import mx.its.dsw2.biblioteca.Modelo.Usuario;
import mx.its.dsw2.bibliotecaDao.DetallePrestamoDao;
import mx.its.dsw2.bibliotecaDao.DetallePrestamoDaoLocal;
import mx.its.dsw2.bibliotecaDao.PrestamoDaoLocal;

/**
 *
 * @author Yessy
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {
    @EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoTransaccion register(Prestamo lend, List<Libro> books) {//Registro de prestamo
        int available=3; //disponible
        List<Prestamo> incompleteLend=prestamoDao.findImcomplete(lend.getIdUsuario());
        for(Prestamo prestamo : incompleteLend){
        available=available - detallePrestamoDao.findLends(prestamo).size();
        }
        if(available<=0 || books.size()>available || lend.getIdUsuario()==null || books.size()<=0){
            return EstadoTransaccion.INCOMPLETO;
        }else{
        Date fecha=new Date();
        Time hora=new Time(fecha.getTime());
        
        for(Libro book:books){
        DetallePrestamo dp= new DetallePrestamo();
        dp.setIdLibro(book);
        dp.setIdPrestamo(lend);
        lend.setFecha(fecha);
        lend.setHora(hora);
        dp.setEstado(EstadoDetallePrestamo.PRESTADO.ordinal());
        prestamoDao.create(lend);
        }
        return EstadoTransaccion.COMPLETO;
        }  
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    @Override
    public EstadoTransaccion takeback(List<Libro> books) {//devolucion de libro
        for(Libro book: books){
        DetallePrestamo dp=detallePrestamoDao.findBooks(book);
        if(dp==null){
           return EstadoTransaccion.INCOMPLETO; 
        }else{
            dp.setEstado(EstadoDetallePrestamo.REGRESADO.ordinal());
        detallePrestamoDao.edit(dp);
        }
        }
                return null;
    }

    @Override
    public EstadoDetallePrestamo imcompleteLendsByUser(Prestamo lend, Usuario user) {//prestamos pendientes por usuario
        prestamoDao.findImcomplete(user);               
        
         //List<Prestamo> incompleteLend=prestamoDao.findImcomplete(lend.getIdUsuario());
         
        return null;
    }

    @Override
    public List<Libro> lendBooksByUser(Libro book, Usuario user) {//lista de libros prestados por usuario
        //findLends
        return null;
    }

    @Override
    public List<Prestamo> generalIncompleteLends(Prestamo lend) {//lista de pretamos vencidos genrales
        return null;
    }

    @Override
    public List<Libro> generalLendsBooks(Libro book) {//lista de libros prestados generales
        return null;
    }

    
     @Override
    //Listar todo
    public List<Prestamo> getAll() {
        return prestamoDao.findAll();
    }
     
     
     
}

//prestamos pendientes por usuario--imcompleteLendsByUser
//lista de libros prestados por usuario--lendBooksByUser
//lista de pretamos vencidos genrales--generalIncompleteLends
//lista de libros prestados generales--generalLendsBooks

